home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 14 / CU Amiga Magazine's Super CD-ROM 14 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-09].iso / CUCD / Programming / IEditor / Generators / C / code_handlers.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-06-17  |  16.9 KB  |  601 lines

  1. /// Includes
  2. #define INTUI_V36_NAMES_ONLY
  3.  
  4. #include <exec/types.h>                 // exec
  5. #include <exec/lists.h>
  6. #include <exec/memory.h>
  7. #include <exec/nodes.h>
  8. #include <dos/dos.h>                    // dos
  9. #include <dos/dostags.h>
  10. #include <intuition/intuition.h>        // intuition
  11. #include <libraries/gadtools.h>         // libraries
  12. #include <clib/exec_protos.h>           // protos
  13. #include <clib/dos_protos.h>
  14. #include <pragmas/exec_pragmas.h>       // pragmas
  15. #include <pragmas/dos_pragmas.h>
  16.  
  17. #include <string.h>
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <ctype.h>
  21.  
  22. #include "DEV_IE:Generators/defs.h"
  23. #include "DEV_IE:Include/IEditor.h"
  24. #include "DEV_IE:Generators/C/Protos.h"
  25. ///
  26. /// Data
  27. static UBYTE VanillaTmp[] = "\nBOOL %sVanillaKey( void )\n"
  28.                 "{\n"
  29.                 "\t/*  Routine for IDCMP_VANILLAKEY  */\n"
  30.                 "\treturn( TRUE );\n"
  31.                 "}\n";
  32.  
  33. ULONG IDCMPVer[] = { IDCMP_MENUVERIFY, IDCMP_REQVERIFY, IDCMP_SIZEVERIFY };
  34.  
  35. UBYTE *IDCMPVerStr[] = {
  36.     "\n\t\tif( class == IDCMP_MENUVERIFY )\n\t\t\trunning = %sMenuVerify();\n",
  37.     "\n\t\tif( class == IDCMP_REQVERIFY )\n\t\t\trunning = %sReqVerify();\n",
  38.     "\n\t\tif( class == IDCMP_SIZEVERIFY )\n\t\t\trunning = %sSizeVerify();\n"
  39. };
  40.  
  41. UBYTE *IDCMPVerProto[] = {
  42.     "extern BOOL %sMenuVerify( void );\n",
  43.     "extern BOOL %sReqVerify( void );\n",
  44.     "extern BOOL %sSizeVerify( void );\n"
  45. };
  46.  
  47. UBYTE *IDCMPVerTmp[] = {
  48.     "\nBOOL %sMenuVerify( void )\n"
  49.     "{\n"
  50.     "\t/*  Routine for IDCMP_MENUVERIFY  */\n"
  51.     "\treturn( TRUE );\n"
  52.     "}\n", // ---
  53.     "\nBOOL %sReqVerify( void )\n"
  54.     "{\n"
  55.     "\t/*  Routine for IDCMP_REQVERIFY  */\n"
  56.     "\treturn( TRUE );\n"
  57.     "}\n", // ---
  58.     "\nBOOL %sSizeVerify( void )\n"
  59.     "{\n"
  60.     "\t/*  Routine for IDCMP_SIZEVERIFY  */\n"
  61.     "\treturn( TRUE );\n"
  62.     "}\n",
  63. };
  64.  
  65. UBYTE CaseRefresh[] = "\n\t\t\tcase\tIDCMP_REFRESHWINDOW:\n"
  66.                  "\t\t\t\tGT_BeginRefresh( %sWnd );\n"
  67.                  "\t\t\t\tGT_EndRefresh( %sWnd, TRUE );\n"
  68.                  "\t\t\t\tbreak;\n";
  69.  
  70. UBYTE CaseRefresh2[] = "\n\t\t\tcase\tIDCMP_REFRESHWINDOW:\n"
  71.                   "\t\t\t\tGT_BeginRefresh( %sWnd );\n"
  72.                   "\t\t\t\t%sRender();\n"
  73.                   "\t\t\t\tGT_EndRefresh( %sWnd, TRUE );\n"
  74.                   "\t\t\t\tbreak;\n";
  75.  
  76. UBYTE *IDCMPStr[] = {
  77.     NULL,
  78.     "\n\t\t\tcase\tIDCMP_NEWSIZE:\n"
  79.     "\t\t\t\trunning = %sNewSize();\n"
  80.     "\t\t\t\tbreak;\n",
  81.  
  82.     CaseRefresh,
  83.  
  84.     "\n\t\t\tcase\tIDCMP_MOUSEBUTTONS:\n"
  85.     "\t\t\t\trunning = %sMouseButtons();\n"
  86.     "\t\t\t\tbreak;\n",
  87.  
  88.     "\n\t\t\tcase\tIDCMP_MOUSEMOVE:\n"
  89.     "\t\t\t\trunning = %sMouseMove();\n"
  90.     "\t\t\t\tbreak;\n",
  91.  
  92.     "\n\t\t\tcase\tIDCMP_GADGETDOWN:\n"
  93.     "\t\t\t\tfunc = (( struct Gadget * )%sMsg.IAddress )->UserData;\n"
  94.     "\t\t\t\trunning = (*func)();\n"
  95.     "\t\t\t\tbreak;\n",
  96.  
  97.     "\n\t\t\tcase\tIDCMP_GADGETUP:\n"
  98.     "\t\t\t\tfunc = (( struct Gadget * )%sMsg.IAddress )->UserData;\n"
  99.     "\t\t\t\trunning = (*func)();\n"
  100.     "\t\t\t\tbreak;\n",
  101.  
  102.     "\n\t\t\tcase\tIDCMP_REQSET:\n"
  103.     "\t\t\t\trunning = %sReqSet();\n"
  104.     "\t\t\t\tbreak;\n",
  105.  
  106.     "\n\t\t\tcase\tIDCMP_MENUPICK:\n"
  107.     "\t\t\t\twhile( %sMsg.Code != MENUNULL ) {\n"
  108.     "\t\t\t\t\tn = ItemAddress( %sMenus, %sMsg.Code );\n"
  109.     "\t\t\t\t\tfunc = (GTMENUITEM_USERDATA( n ));\n"
  110.     "\t\t\t\t\trunning = (*func)();\n"
  111.     "\t\t\t\t\t%sMsg.Code = n->NextSelect;\n"
  112.     "\t\t\t\t}\n"
  113.     "\t\t\t\tbreak;\n",
  114.  
  115.     "\n\t\t\tcase\tIDCMP_CLOSEWINDOW:\n"
  116.     "\t\t\t\trunning = %sCloseWindow();\n"
  117.     "\t\t\t\tbreak;\n",
  118.  
  119.     "\n\t\t\tcase\tIDCMP_RAWKEY:\n"
  120.     "\t\t\t\trunning = %sRawKey();\n"
  121.     "\t\t\t\tbreak;\n",
  122.  
  123.     NULL,
  124.  
  125.     "\n\t\t\tcase\tIDCMP_REQCLEAR:\n"
  126.     "\t\t\t\trunning = %sReqClear();\n"
  127.     "\t\t\t\tbreak;\n",
  128.  
  129.     NULL,
  130.  
  131.     "\n\t\t\tcase\tIDCMP_NEWPREFS:\n"
  132.     "\t\t\t\trunning = %sNewPrefs();\n"
  133.     "\t\t\t\tbreak;\n",
  134.  
  135.     "\n\t\t\tcase\tIDCMP_DISKINSERTED:\n"
  136.     "\t\t\t\trunning = %sDiskInserted();\n"
  137.     "\t\t\t\tbreak;\n",
  138.  
  139.     "\n\t\t\tcase\tIDCMP_DISKREMOVED:\n"
  140.     "\t\t\t\trunning = %sDiskRemoved();\n"
  141.     "\t\t\t\tbreak;\n",
  142.  
  143.     "\n\t\t\tcase\tIDCMP_WBENCHMESSAGE:\n"
  144.     "\t\t\t\trunning = %sWBenchMessage();\n"
  145.     "\t\t\t\tbreak;\n",
  146.  
  147.     "\n\t\t\tcase\tIDCMP_ACTIVEWINDOW:\n"
  148.     "\t\t\t\trunning = %sActiveWindow();\n"
  149.     "\t\t\t\tbreak;\n",
  150.  
  151.     "\n\t\t\tcase\tIDCMP_INACTIVEWINDOW:\n"
  152.     "\t\t\t\trunning = %sInactiveWindow();\n"
  153.     "\t\t\t\tbreak;\n",
  154.  
  155.     "\n\t\t\tcase\tIDCMP_DELTAMOVE:\n"
  156.     "\t\t\t\trunning = %sDeltaMove();\n"
  157.     "\t\t\t\tbreak;\n",
  158.  
  159.     "\n\t\t\tcase\tIDCMP_VANILLAKEY:\n"
  160.     "\t\t\t\trunning = %sVanillaKey();\n"
  161.     "\t\t\t\tbreak;\n",
  162.  
  163.     "\n\t\t\tcase\tIDCMP_INTUITICKS:\n"
  164.     "\t\t\t\trunning = %sIntuiTicks();\n"
  165.     "\t\t\t\tbreak;\n",
  166.  
  167.     "\n\t\t\tcase\tIDCMP_IDCMPUPDATE:\n"
  168.     "\t\t\t\trunning = %sIDCMPUpdate();\n"
  169.     "\t\t\t\tbreak;\n",
  170.  
  171.     "\n\t\t\tcase\tIDCMP_MENUHELP:\n"
  172.     "\t\t\t\trunning = %sMenuHelp();\n"
  173.     "\t\t\t\tbreak;\n",
  174.  
  175.     "\n\t\t\tcase\tIDCMP_CHANGEWINDOW:\n"
  176.     "\t\t\t\trunning = %sChangeWindow();\n"
  177.     "\t\t\t\tbreak;\n",
  178.  
  179.     "\n\t\t\tcase\tIDCMP_GADGETHELP:\n"
  180.     "\t\t\t\trunning = %sGadgetHelp();\n"
  181.     "\t\t\t\tbreak;\n"
  182. };
  183.  
  184. UBYTE *IDCMPProto[] = {
  185.     NULL,
  186.     "extern BOOL %sNewSize( void );\n",
  187.     NULL,
  188.     "extern BOOL %sMouseButtons( void );\n",
  189.     "extern BOOL %sMouseMove( void );\n",
  190.     NULL,
  191.     NULL,
  192.     "extern BOOL %sReqSet( void );\n",
  193.     NULL,
  194.     "extern BOOL %sCloseWindow( void );\n",
  195.     "extern BOOL %sRawKey( void );\n",
  196.     NULL,
  197.     "extern BOOL %sReqClear( void );\n",
  198.     NULL,
  199.     "extern BOOL %sNewPrefs( void );\n",
  200.     "extern BOOL %sDiskInserted( void );\n",
  201.     "extern BOOL %sDiskRemoved( void );\n",
  202.     "extern BOOL %sWBenchMessage( void );\n",
  203.     "extern BOOL %sActiveWindow( void );\n",
  204.     "extern BOOL %sInactiveWindow( void );\n",
  205.     "extern BOOL %sDeltaMove( void );\n",
  206.     "extern BOOL %sVanillaKey( void );\n",
  207.     "extern BOOL %sIntuiTicks( void );\n",
  208.     "extern BOOL %sIDCMPUpdate( void );\n",
  209.     "extern BOOL %sMenuHelp( void );\n",
  210.     "extern BOOL %sChangeWindow( void );\n",
  211.     "extern BOOL %sGadgetHelp( void );\n"
  212. };
  213.  
  214. UBYTE *IDCMPTmp[] = {
  215.     NULL,
  216.     "\nBOOL %sNewSize( void )\n"
  217.     "{\n"
  218.     "\t/*  Routine for IDCMP_NEWSIZE  */\n"
  219.     "\treturn( TRUE );\n"
  220.     "}\n",
  221.     NULL,
  222.     "\nBOOL %sMouseButtons( void )\n"
  223.     "{\n"
  224.     "\t/*  Routine for IDCMP_MOUSEBUTTONS  */\n"
  225.     "\treturn( TRUE );\n"
  226.     "}\n",
  227.  
  228.     "\nBOOL %sMouseMove( void )\n"
  229.     "{\n"
  230.     "\t/*  Routine for IDCMP_MOUSEMOVE  */\n"
  231.     "\treturn( TRUE );\n"
  232.     "}\n",
  233.  
  234.     NULL,
  235.     NULL,
  236.     "\nBOOL %sReqSet( void )\n"
  237.     "{\n"
  238.     "\t/*  Routine for IDCMP_REQSET  */\n"
  239.     "\treturn( TRUE );\n"
  240.     "}\n",
  241.     NULL,
  242.     "\nBOOL %sCloseWindow( void )\n"
  243.     "{\n"
  244.     "\t/*  Routine for IDCMP_CLOSEWINDOW  */\n"
  245.     "\t/*  Return FALSE to quit, I suppose... ;)  */\n"
  246.     "\treturn( FALSE );\n"
  247.     "}\n",
  248.  
  249.     "\nBOOL %sRawKey( void )\n"
  250.     "{\n"
  251.     "\t/*  Routine for IDCMP_RAWKEY  */\n"
  252.     "\treturn( TRUE );\n"
  253.     "}\n",
  254.  
  255.     NULL,
  256.     "\nBOOL %sReqClear( void )\n"
  257.     "{\n"
  258.     "\t/*  Routine for IDCMP_REQCLEAR  */\n"
  259.     "\treturn( TRUE );\n"
  260.     "}\n",
  261.     NULL,
  262.     "\nBOOL %sNewPrefs( void )\n"
  263.     "{\n"
  264.     "\t/*  Routine for IDCMP_NEWPREFS  */\n"
  265.     "\treturn( TRUE );\n"
  266.     "}\n",
  267.  
  268.     "\nBOOL %sDiskInserted( void )\n"
  269.     "{\n"
  270.     "\t/*  Routine for IDCMP_DISKINSERTED  */\n"
  271.     "\treturn( TRUE );\n"
  272.     "}\n",
  273.  
  274.     "\nBOOL %sDiskRemoved( void )\n"
  275.     "{\n"
  276.     "\t/*  Routine for IDCMP_DISKREMOVED  */\n"
  277.     "\treturn( TRUE );\n"
  278.     "}\n",
  279.  
  280.     "\nBOOL %sWBenchMessage( void )\n"
  281.     "{\n"
  282.     "\t/*  Routine for IDCMP_WBENCHMESSAGE  */\n"
  283.     "\treturn( TRUE );\n"
  284.     "}\n",
  285.  
  286.     "\nBOOL %sActiveWindow( void )\n"
  287.     "{\n"
  288.     "\t/*  Routine for IDCMP_ACTIVEWINDOW  */\n"
  289.     "\treturn( TRUE );\n"
  290.     "}\n",
  291.  
  292.     "\nBOOL %sInactiveWindow( void )\n"
  293.     "{\n"
  294.     "\t/*  Routine for IDCMP_INACTIVEWINDOW  */\n"
  295.     "\treturn( TRUE );\n"
  296.     "}\n",
  297.  
  298.     "\nBOOL %sDeltaMove( void )\n"
  299.     "{\n"
  300.     "\t/*  Routine for IDCMP_DELTAMOVE  */\n"
  301.     "\treturn( TRUE );\n"
  302.     "}\n",
  303.  
  304.     "\nBOOL %sVanillaKey( void )\n"
  305.     "{\n"
  306.     "\t/*  Routine for IDCMP_VANILLAKEY  */\n"
  307.     "\treturn( TRUE );\n"
  308.     "}\n",
  309.  
  310.     "\nBOOL %sIntuiTicks( void )\n"
  311.     "{\n"
  312.     "\t/*  Routine for IDCMP_INTUITICKS  */\n"
  313.     "\treturn( TRUE );\n"
  314.     "}\n",
  315.  
  316.     "\nBOOL %sIDCMPUpdate( void )\n"
  317.     "{\n"
  318.     "\t/*  Routine for IDCMP_IDCMPUPDATE  */\n"
  319.     "\treturn( TRUE );\n"
  320.     "}\n",
  321.  
  322.     "\nBOOL %sMenuHelp( void )\n"
  323.     "{\n"
  324.     "\t/*  Routine for IDCMP_MENUHELP  */\n"
  325.     "\treturn( TRUE );\n"
  326.     "}\n",
  327.  
  328.     "\nBOOL %sChangeWindow( void )\n"
  329.     "{\n"
  330.     "\t/*  Routine for IDCMP_CHANGEWINDOW  */\n"
  331.     "\treturn( TRUE );\n"
  332.     "}\n",
  333.  
  334.     "\nBOOL %sGadgetHelp( void )\n"
  335.     "{\n"
  336.     "\t/*  Routine for IDCMP_GADGETHELP  */\n"
  337.     "\treturn( TRUE );\n"
  338.     "}\n"
  339. };
  340. ///
  341.  
  342.  
  343.  
  344. /// WriteIDCMPHandler
  345. void WriteIDCMPHandler( struct GenFiles *Files, struct IE_Data *IE )
  346. {
  347.     struct WindowInfo  *wnd;
  348.     UWORD               c;
  349.     ULONG               idcmp;
  350.  
  351.  
  352.     for( wnd = IE->win_list.mlh_Head; wnd->wi_succ; wnd = wnd->wi_succ ) {
  353.     if( wnd->wi_IDCMP ) {
  354.  
  355.         FPrintf( Files->XDef, "extern LONG Handle%sIDCMP( void );\n", wnd->wi_Label );
  356.  
  357.         FPrintf( Files->Std, "\nLONG Handle%sIDCMP( void )\n"
  358.                  "{\n",
  359.              wnd->wi_Label );
  360.  
  361.         if(!(( IE->SrcFlags & SHARED_PORT ) && ( wnd->wi_Tags & W_SHARED_PORT )))
  362.         FPuts( Files->Std, "\tstruct IntuiMessage\t*m;\n" );
  363.  
  364.         if( wnd->wi_IDCMP & IDCMP_MENUPICK )
  365.         FPuts( Files->Std, "\tstruct MenuItem\t\t*n;\n" );
  366.  
  367.         FPuts( Files->Std, "\tBOOL\t\t\t(*func)(void);\n"
  368.                    "\tBOOL\t\t\trunning = TRUE;\n"
  369.                    "\tint\t\t\tclass;\n"
  370.                    "\n" );
  371.  
  372.         if(!(( IE->SrcFlags & SHARED_PORT ) && ( wnd->wi_Tags & W_SHARED_PORT )))
  373.         FPrintf( Files->Std, "\twhile( m = GT_GetIMsg( %sWnd->UserPort )) {\n\n"
  374.                      "\t\tCopyMem((char *)m, (char *)&%sMsg, (long)sizeof( struct IntuiMessage ));\n\n",
  375.              wnd->wi_Label, wnd->wi_Label );
  376.         else
  377.         FPrintf( Files->Std, "#define\t%sMsg IDCMPMsg\n\n", wnd->wi_Label );
  378.  
  379.         FPrintf( Files->Std, "\t\tclass = %sMsg.Class;\n", wnd->wi_Label );
  380.  
  381.         IE->win_info = wnd;
  382.  
  383.         idcmp = ( *IE->IEXSrcFun->IDCMP )( wnd->wi_IDCMP );
  384.  
  385.         for( c = 0; c < 3; c++ ) {
  386.         if( idcmp & IDCMPVer[ c ]) {
  387.             FPrintf( Files->XDef, IDCMPVerProto[ c ], wnd->wi_Label );
  388.             FPrintf( Files->Std, IDCMPVerStr[ c ], wnd->wi_Label );
  389.             if( Prefs.Flags & GEN_TEMPLATE )
  390.             FPrintf( Files->Temp, IDCMPVerTmp[ c ], wnd->wi_Label );
  391.         }
  392.         }
  393.  
  394.         if(!(( IE->SrcFlags & SHARED_PORT ) && ( wnd->wi_Tags & W_SHARED_PORT )))
  395.         FPuts( Files->Std, "\n\t\tGT_ReplyIMsg( m );\n\n" );
  396.  
  397.         FPuts( Files->Std, "\t\tswitch( class ) {\n" );
  398.  
  399.         if(( idcmp & IDCMP_GADGETUP ) && ( idcmp & IDCMP_GADGETDOWN )) {
  400.         idcmp &= ~( IDCMP_GADGETUP | IDCMP_GADGETDOWN );
  401.         FPrintf( Files->Std, "\n\t\t\tcase\tIDCMP_GADGETUP:\n"
  402.                      "\t\t\tcase\tIDCMP_GADGETDOWN:\n"
  403.                      "\t\t\t\tfunc = (( struct Gadget * )%sMsg.IAddress )->UserData;\n"
  404.                      "\t\t\t\trunning = (*func)();\n"
  405.                      "\t\t\t\tbreak;\n",
  406.              wnd->wi_Label );
  407.         }
  408.  
  409.         if(( Prefs.Flags & KEY_HANDLER ) && ( wnd->wi_NumKeys )) {
  410.  
  411.         FPrintf( Files->Std, "\n\t\t\tcase\tIDCMP_VANILLAKEY:\n"
  412.                      "\t\t\t\trunning = Handle%sKeys();\n"
  413.                      "\t\t\t\tbreak;\n",
  414.              wnd->wi_Label );
  415.  
  416.         if( idcmp & IDCMP_VANILLAKEY ) {
  417.             idcmp &= ~IDCMP_VANILLAKEY;
  418.             FPrintf( Files->XDef, "extern BOOL %sVanillaKey( void );\n", wnd->wi_Label );
  419.             if( Prefs.Flags & GEN_TEMPLATE )
  420.             FPrintf( Files->Temp, VanillaTmp, wnd->wi_Label );
  421.         }
  422.         }
  423.  
  424.         IDCMPStr[2] = wnd->wi_NeedRender ? &CaseRefresh2[0] : &CaseRefresh[0];
  425.  
  426.         for( c = 0; c < IDCMPS_NUM; c++ ) {
  427.  
  428.         if( idcmp & idcmps[ c ]) {
  429.             if( IDCMPStr[ c ]) {
  430.  
  431.             FPrintf( Files->Std, IDCMPStr[ c ],
  432.                  wnd->wi_Label, wnd->wi_Label,
  433.                  wnd->wi_Label, wnd->wi_Label );
  434.  
  435.             if( IDCMPProto[ c ])
  436.                 FPrintf( Files->XDef, IDCMPProto[ c ], wnd->wi_Label );
  437.  
  438.             if(( Prefs.Flags & GEN_TEMPLATE ) && ( IDCMPTmp[ c ]))
  439.                 FPrintf( Files->Temp, IDCMPTmp[ c ], wnd->wi_Label );
  440.             }
  441.         }
  442.         }
  443.  
  444.         if(!(( IE->SrcFlags & SHARED_PORT ) && ( wnd->wi_Tags & W_SHARED_PORT )))
  445.         FPuts( Files->Std, "\n\t\t}" );
  446.  
  447.         FPuts( Files->Std, "\n\t}\n\treturn( running );\n}\n" );
  448.     }
  449.     }
  450. }
  451. ///
  452. /// WriteKeyHandler
  453. void WriteKeyHandler( struct GenFiles *Files, struct IE_Data *IE )
  454. {
  455.     struct WindowInfo  *wnd;
  456.     struct GadgetInfo  *gad;
  457.     UBYTE               ch;
  458.  
  459.     for( wnd = IE->win_list.mlh_Head; wnd->wi_succ; wnd = wnd->wi_succ ) {
  460.     if( wnd->wi_NumKeys ) {
  461.  
  462.         FPrintf( Files->XDef, "extern BOOL Handle%sKeys( void );\n", wnd->wi_Label );
  463.  
  464.         FPrintf( Files->Std, "\nBOOL Handle%sKeys( void )\n"
  465.                  "{\n"
  466.                  "\tBOOL running = TRUE;\n\n",
  467.              wnd->wi_Label );
  468.  
  469.         if(!(( IE->SrcFlags & LOCALIZE ) && ( wnd->wi_Tags & W_LOC_GADGETS ))) {
  470.         if( Prefs.Flags & TO_LOWER )
  471.             FPrintf( Files->Std, "\tswitch( tolower( %sMsg.Code )) {\n", wnd->wi_Label );
  472.         else
  473.             FPrintf( Files->Std, "\tswitch( %sMsg.Code ) {\n", wnd->wi_Label );
  474.         } else {
  475.         FPuts( Files->Std, "\tUBYTE ch = " );
  476.         if( Prefs.Flags & TO_LOWER )
  477.             FPrintf( Files->Std, "tolower( %sMsg.Code );\n", wnd->wi_Label );
  478.         else
  479.             FPrintf( Files->Std, "%sMsg.Code;\n", wnd->wi_Label );
  480.         }
  481.  
  482.         for( gad = wnd->wi_Gadgets.mlh_Head; gad->g_Node.ln_Succ; gad = gad->g_Node.ln_Succ ) {
  483.         if( gad->g_flags2 & G_KEYPRESSED ) {
  484.  
  485.  
  486.             if(( IE->SrcFlags & LOCALIZE ) && ( wnd->wi_Tags & W_LOC_GADGETS )) {
  487.             if( Prefs.Flags & TO_LOWER )
  488.                 FPrintf( Files->Std, "\n\tif( ch == tolower( GetActivationKey( %sNGad[ GD_%s ].ng_GadgetText ))) {\n",
  489.                      wnd->wi_Label, gad->g_Label );
  490.             else
  491.                 FPrintf( Files->Std, "\n\tif( ch == GetActivationKey( %sNGad[ GD_%s ].ng_GadgetText )) {\n",
  492.                      wnd->wi_Label, gad->g_Label );
  493.             } else {
  494.             ch = ( Prefs.Flags & TO_LOWER ) ? tolower( gad->g_Key ) : gad->g_Key;
  495.             FPrintf( Files->Std, "\n\t\tcase\t'%lc':\n", ch );
  496.             }
  497.  
  498.  
  499.             if(( gad->g_Kind == STRING_KIND ) || ( gad->g_Kind == INTEGER_KIND )) {
  500.             FPrintf( Files->Std, "\t\t\tif(!( %sGadgets[ GD_%s ]->Flags & GFLG_DISABLED ))\n"
  501.                          "\t\t\t\tActivateGadget( %sGadgets[ GD_%s ], %sWnd, NULL );\n",
  502.                  wnd->wi_Label, gad->g_Label, wnd->wi_Label, gad->g_Label, wnd->wi_Label );
  503.             } else {
  504.  
  505.             if(( IE->SrcFlags & LOCALIZE ) && ( wnd->wi_Tags & W_LOC_GADGETS )) {
  506.                 if(( Prefs.MoreFlags & NO_BUTTON_KP ) && ( gad->g_Kind == BUTTON_KIND ))
  507.                 FPrintf( Files->Std, "\t\treturn( %sClicked() );\n",
  508.                      gad->g_Label );
  509.                 else
  510.                 FPrintf( Files->Std, "\t\treturn( %sKeyPressed() );\n",
  511.                      gad->g_Label );
  512.             } else {
  513.                 if(( Prefs.MoreFlags & NO_BUTTON_KP ) && ( gad->g_Kind == BUTTON_KIND ))
  514.                 FPrintf( Files->Std, "\t\t\trunning = %sClicked();\n",
  515.                      gad->g_Label );
  516.                 else
  517.                 FPrintf( Files->Std, "\t\t\trunning = %sKeyPressed();\n",
  518.                      gad->g_Label );
  519.             }
  520.  
  521.             if(!(( Prefs.MoreFlags & NO_BUTTON_KP ) && ( gad->g_Kind == BUTTON_KIND ))) {
  522.                 FPrintf( Files->XDef, "extern BOOL %sKeyPressed( void );\n", gad->g_Label );
  523.  
  524.                 if( Prefs.Flags & GEN_TEMPLATE )
  525.                 if(!( Prefs.Flags & ONLY_NEW_TMP ) || (!( gad->g_flags2 & G_NO_TEMPLATE )))
  526.                     FPrintf( Files->Temp, "\nBOOL %sKeyPressed( void )\n"
  527.                               "{\n"
  528.                               "\t/*  Routine when \"%s\"'s activation key is pressed  */\n"
  529.                               "\n"
  530.                               "\t/*  ...or return TRUE not to call the gadget function  */\n"
  531.                               "\treturn %sClicked();\n"
  532.                               "}\n",
  533.                          gad->g_Label, gad->g_Titolo, gad->g_Label );
  534.             }
  535.             }
  536.  
  537.             if(( IE->SrcFlags & LOCALIZE ) && ( wnd->wi_Tags & W_LOC_GADGETS ))
  538.             FPuts( Files->Std, "\t}\n" );
  539.             else
  540.             FPuts( Files->Std, "\t\tbreak;\n" );
  541.         }
  542.         }
  543.  
  544.         if( wnd->wi_IDCMP & IDCMP_VANILLAKEY )
  545.         if(( IE->SrcFlags & LOCALIZE ) && ( wnd->wi_Tags & W_LOC_GADGETS ))
  546.             FPrintf( Files->Std, "\n\trunning = %sVanillaKey();\n",
  547.                  wnd->wi_Label );
  548.         else
  549.             FPrintf( Files->Std, "\n\t\tdefault:\n"
  550.                      "\t\t\trunning = %sVanillaKey();\n"
  551.                      "\t\t\tbreak;\n",
  552.                  wnd->wi_Label );
  553.  
  554.         if(!(( IE->SrcFlags & LOCALIZE ) && ( wnd->wi_Tags & W_LOC_GADGETS )))
  555.         FPuts( Files->Std, "\n\t}" ); /* end Select */
  556.  
  557.         FPuts( Files->Std, "\n\treturn( running );\n}\n" );
  558.     }
  559.     }
  560. }
  561. ///
  562. /// WriteClickedPtrs
  563. void WriteClickedPtrs( struct GenFiles *Files, struct IE_Data *IE )
  564. {
  565.     struct WindowInfo  *wnd;
  566.  
  567.     for( wnd = IE->win_list.mlh_Head; wnd->wi_succ; wnd = wnd->wi_succ ) {
  568.     struct GadgetBank  *bank;
  569.  
  570.     WriteClicked( Files, IE, &wnd->wi_Gadgets );
  571.  
  572.     for( bank = wnd->wi_GBanks.mlh_Head; bank->Node.ln_Succ; bank = bank->Node.ln_Succ )
  573.         WriteClicked( Files, IE, &bank->Storage );
  574.     }
  575. }
  576. ///
  577. /// WriteClicked
  578. void WriteClicked( struct GenFiles *Files, struct IE_Data *IE, struct MinList *Gadgets )
  579. {
  580.     struct GadgetInfo  *gad;
  581.  
  582.     for( gad = Gadgets->mlh_Head; gad->g_Node.ln_Succ; gad = gad->g_Node.ln_Succ ) {
  583.     if( gad->g_flags2 & G_CLICKED ) {
  584.  
  585.         FPrintf( Files->XDef, "extern BOOL %sClicked( void );\n", gad->g_Label );
  586.  
  587.         if( Prefs.Flags & GEN_TEMPLATE ) {
  588.         if((!( Prefs.Flags & ONLY_NEW_TMP )) || (!( gad->g_flags2 & G_NO_TEMPLATE )))
  589.             FPrintf( Files->Temp, "\nBOOL %sClicked( void )\n"
  590.                       "{\n"
  591.                       "\t/*  Routine when \"%s\" is clicked  */\n"
  592.                       "\treturn( TRUE );\n"
  593.                       "}\n",
  594.                  gad->g_Label, gad->g_Titolo );
  595.         }
  596.     }
  597.     }
  598. }
  599. ///
  600.  
  601.